package com.atguigu.jdk;

import java.io.*;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 装饰者模式
 * @create: 2022-02-18 15:37
 **/
public class Decorator {
    /**
     * 被装饰者（抽象类，下面有很多子类）
     */
    private InputStream inputStream;
    /**
     * 装饰者（普通类，下面有很多子类） 相当于Decorator.java
     */
    private FilterInputStream filterInputStream;

    public static void main(String[] args) throws IOException {

        //说明
        //1.inputStream 是抽象类，类似前面我们讲的 Drink
        //2.FileInputStream 是 InputStream 子类，类似前面讲的单品咖啡 LongBlack、DeCaf
        //3.FilterInputStream 是 InputStream 子类，类似前面讲的 Decorator 装饰者
        //4.DataInputStream 是 FilterInputStream 子类，具体的装饰者，类似前面的 Chocolate、Milk
        //5.FilterInputStream 中有 protected volatile InputStream in; 即含有被装饰者
        //6.分析得出在jdk的io体系中，就是使用装饰者模式

        DataInputStream dis = new DataInputStream(new FileInputStream("D:\\my\\学习技术\\尚硅谷\\设计模式\\源码笔记课件\\代码\\Spring\\src\\com\\atguigu\\spring\\test\\ProtoType.java"));
        System.out.println(dis.read());
        dis.close();
    }
}
